<?php
/**
 ***********************************************************************************************************************
 * AES加密 CBC 128位
 ***********************************************************************************************************************
 */

namespace artisan;

/**
 * Class aes
 */
class aes
{
    /**
     * 加密
     * @param $str
     * @param $key
     * @param $iv
     * @return string
     */
    public static function encrypt($str, $key, $iv = '0000000000000000')
    {
        $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, self::pad16($key), $str, MCRYPT_MODE_CBC, self::pad16($iv));
        return base64_encode($encrypted);
    }

    /**
     * 解密
     * @param $str
     * @param $key
     * @param $iv
     * @return string
     */
    public static function decrypt($str, $key, $iv = '0000000000000000')
    {
        $encryptedData = base64_decode($str);
        return mcrypt_decrypt(MCRYPT_RIJNDAEL_128, self::pad16($key), $encryptedData, MCRYPT_MODE_CBC, self::pad16($iv));
    }

    /**
     * 处理长度不够或者长度超出填充问题
     * @param string $val
     * @return string
     */
    public static function pad16($val)
    {
        $val = strlen($val) < 16 ? str_pad($val, 16, '0') : substr($val, 0, 16);
        return $val;
    }
}